iT邦幫忙

2023 iThome 鐵人賽

DAY 21
0
Software Development

30天快速打造Python資料結構&演算法邏輯刷爆LeetCode系列 第 21

DAY 21 「Leetcode面試」必考題目的Python程式碼撰寫~

  • 分享至 

  • xImage
  •  

Leetcode面試必考題目到底有哪些?

LeetCode 面試經常會涉及許多常見的算法和數據結構題目題目類型:

  • 數組和字符串:包括數組操作、字符串處理、子數組和子字符串問題等。
  • 鏈表:涵蓋了單鏈表、雙鏈表、循環鏈表等,以及各種操作和問題。
  • 棧和隊列:包括基本的棧和隊列操作,以及與之相關的問題,如有效的括號、最小棧、柱狀圖中最大的矩形等。
  • 堆和優先隊列:主要涉及到堆的操作,如插入、刪除最大值等,以及與之相關的問題。
  • 樹和二叉樹:涵蓋了樹的遍歷(前序、中序、後序、層序)、構建、搜索等問題,還包括了一些特定類型的二叉樹問題,如平衡二叉樹、二叉搜索樹等。
  • 遞歸與回溯:包括全排列、子集、組合等問題,也包括一些圖論問題。
  • 動態規劃:可能是LeetCode面試中最重要的一個類別,包括0/1背包、最長公共子序列、最小編輯距離等。
  • 圖:可能涉及到圖的表示、遍歷、最短路徑等問題。
  • 哈希表和集合:包括哈希表的基本操作、設計哈希表、兩數之和等問題。
  • 位運算:包括基本的位運算操作,以及與之相關的問題。
  • 設計問題:可能會涉及到一些面向對象設計或者數據結構設計的問題,如LRU緩存、實現Trie樹等。

常見問題~

兩數之和 (Two Sum)
題目描述:給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和為目標值的那兩個整數,並返回它們的數組下標。

def twoSum(nums, target):
    num_dict = {}
    for i, num in enumerate(nums):
        complement = target - num
        if complement in num_dict:
            return [num_dict[complement], i]
        num_dict[num] = i
    return None

整數反轉 (Reverse Integer)
題目描述:給你一個 32 位的有符號整數 x ,返回將 x 中的數字部分反轉後的結果。

def reverse(x):
    result = 0
    sign = 1 if x > 0 else -1
    x = abs(x)
    while x != 0:
        pop = x % 10
        x //= 10
        if result > (2**31 - 1) // 10:
            return 0
        result = result * 10 + pop
    return result * sign

回文數 (Palindrome Number)
題目描述:判斷一個整數是否是回文數。回文數是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數。

def isPalindrome(x):
    if x < 0:
        return False
    reversed_num = int(str(x)[::-1])
    return x == reversed_num

有效的括號 (Valid Parentheses)
題目描述:給定一個只包括 '(',')','{','}','[',']' 的字符串,判斷字符串是否有效。

def isValid(s):
    stack = []
    bracket_map = {')': '(', '}': '{', ']': '['}
    for char in s:
        if char in bracket_map:
            top_element = stack.pop() if stack else '#'
            if bracket_map[char] != top_element:
                return False
        else:
            stack.append(char)
    return not stack

合並兩個有序鏈表 (Merge Two Sorted Lists)

題目描述:將兩個升序鏈表合並為一個新的升序鏈表並返回。新鏈表是通過拼接給定的兩個鏈表的所有節點組成的。

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def mergeTwoLists(l1, l2):
    if not l1:
        return l2
    if not l2:
        return l1
    if l1.val < l2.val:
        l1.next = mergeTwoLists(l1.next, l2)
        return l1
    else:
        l2.next = mergeTwoLists(l1, l2.next)
        return l2

上一篇
DAY 20 「動態規劃和貪心算法」應用比較的Python程式碼撰寫~
下一篇
DAY 22「最長無重覆子串 (Longest Substring Without Repeating Characters)」Leetcode題目的Python程式碼撰寫~
系列文
30天快速打造Python資料結構&演算法邏輯刷爆LeetCode30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言